home *** CD-ROM | disk | FTP | other *** search
/ 3D Games - Real-time Rend…ng & Software Technology / 3D Games - Real-time Rendering & Software Technology.iso / flysdk / plugin / lights / sprite_light.cpp < prev   
Encoding:
C/C++ Source or Header  |  2000-03-16  |  1.8 KB  |  104 lines

  1. #include "../../lib/Fly3D.h"
  2. #include "lights.h"
  3.  
  4. int sprite_light::step(int dt)
  5. {
  6.     if (mode&2)
  7.         {
  8.         life-=dt;
  9.         if (directx->mpmode!=FLYMP_SERVER)
  10.             {
  11.             size+=dt*grow;
  12.             if (mode&4)
  13.                 if (life<=0)
  14.                     color.w=0;
  15.                 else color.w=(float)life/source->life;
  16.             }
  17.         }
  18.     return 0;
  19. }
  20.  
  21. int sprite_light::get_custom_param_desc(int i,param_desc *pd)
  22. {
  23.     if (pd!=0)
  24.     switch(i)
  25.     {
  26.         case 0:
  27.             pd->type='p';
  28.             pd->data=&texture;
  29.             strcpy(pd->name,"texture");
  30.             break;
  31.         case 1:
  32.             pd->type='f';
  33.             pd->data=&size;
  34.             strcpy(pd->name,"size");
  35.             break;
  36.         case 2:
  37.             pd->type='c';
  38.             pd->data=&color;
  39.             strcpy(pd->name,"color");
  40.             break;
  41.         case 3:
  42.             pd->type='f';
  43.             pd->data=&grow;
  44.             strcpy(pd->name,"grow");
  45.             break;
  46.         case 4:
  47.             pd->type='f';
  48.             pd->data=&color.w;
  49.             strcpy(pd->name,"transp");
  50.             break;
  51.         case 5:
  52.             pd->type='i';
  53.             pd->data=&mode;
  54.             strcpy(pd->name,"mode");
  55.             break;
  56.     }
  57.     return 6;
  58. }
  59.  
  60. void sprite_light::draw()
  61. {
  62.     static vector x,y,v;
  63.     if (mode&1)
  64.         {
  65.         x=X*size;
  66.         y=Y*size;
  67.         }
  68.     else
  69.         {
  70.         x=flyengine->cam->X*size;
  71.         y=flyengine->cam->Y*size;
  72.         }
  73.  
  74.     glDisable(GL_CULL_FACE);
  75.     glBlendFunc(GL_ONE,GL_ONE);
  76.     glDepthMask(GL_FALSE);
  77.     glDisable(GL_FOG);
  78.  
  79.     glColor3f(color.x*color.w,color.y*color.w,color.z*color.w);
  80.  
  81.     tc->use(texture);
  82.  
  83.     glBegin(GL_QUADS);
  84.  
  85.     glTexCoord2f(1,0);
  86.     glVertex3f(pos.x+x.x-y.x, pos.y+x.y-y.y, pos.z+x.z-y.z);
  87.  
  88.     glTexCoord2f(1,1);
  89.     glVertex3f(pos.x+x.x+y.x, pos.y+x.y+y.y, pos.z+x.z+y.z);
  90.  
  91.     glTexCoord2f(0,1);
  92.     glVertex3f(pos.x+y.x-x.x, pos.y+y.y-x.y, pos.z+y.z-x.z);
  93.  
  94.     glTexCoord2f(0,0);
  95.     glVertex3f(pos.x-x.x-y.x, pos.y+-x.y-y.y, pos.z-x.z-y.z);
  96.  
  97.     glEnd();
  98.  
  99.     glEnable(GL_CULL_FACE);
  100.     glDepthMask(GL_TRUE);
  101.     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  102.     if (flyengine->fog) glEnable(GL_FOG);
  103. }
  104.